package hongjiang.info

object TypeSystemSingletonType extends App {
  import scala.reflect.runtime.universe._
  class A
  val a = new A
  val a2 = new A
  Console println typeOf[a.type]
  val x: a.type = a
  Console println x
  //  val x:a.type = a2
  /**
   * val x:a.type = a2
   * <console>:13: error: type mismatch;
   * found   : a2.type (with underlying type A)
   * required: a.type
   */

  typeOf[a.type] == typeOf[A] // a.type 与 A 不是同一个类型
  typeOf[a.type] == typeOf[a2.type] // a.type 与 a2.type 也不同
  typeOf[a.type] <:< typeOf[A] // a.type 是 A 类型的子类型
  //a.type 与 a2.type 是不同的类型！a.type也是单例类型，它也只有唯一的实例: a (排除null)
  
}